perm filename NEW.INS[MUS,LCS] blob sn#309791 filedate 1977-10-09 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00004 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	<NEW is the "you name it, we got it" string.
C00006 00003	INSTRUMENT VN1 
C00015 00004	INSTRUMENT VN3 
C00040 ENDMK
C⊗;
<NEW is the "you name it, we got it" string.
OUTSPEC←"REW.SND/BYTESIZE=12/HEADER/PLAY/SAVE=256";
SRATE ← 25600; MAG ← 512 / SRATE; NCHNS ← 1;

ARRAY GlissFunc, DecayFunc, AttackFunc, Sinewave, Ampfunc(512);
Synth(Sinewave); 1,1 999;
SEG(Ampfunc);0,0 1,25 1,50 0,75 0,100;
SEG(GlissFunc);0,1 1,50 0,100;                       
SEG(AttackFunc);0,0 1,100;
SEG(DecayFunc);1,1 .6,5 .3,10 .15,25 .07,50 0,100;

FUNCTION Bowset (b,m1,dt,at,r,d);
	Begin

    IF b = 0
	THEN IF m1 > 0.08
	    THEN BEGIN
		dt ← .7; at ← .2;        
      	    END
	    ELSE BEGIN
		dt ← .7; at ← .05; r←0;          
	    END 
	ELSE        
    	    IF m1 > .05
		THEN BEGIN
		    dt ← .05; at ← .2;        
 		END
		ELSE BEGIN
		    dt ← .05; at ← .05; r ← 0;            
		END;
    m1 ← dt;

    IF at + dt ≥ d
	THEN BEGIN
	    at ← d * at;
            dt ← d * dt;
            IF at≤.05 THEN at ← d - dt - .01;
	    END;
	end;

Function NumSet (Vr,Va,sf,f,dl,s1,r,i1,i2,i3,im,lf);
	Begin

    VR ← 5.25 + RAND * .75;
    VA ← .006 + RAND * .001;

    SF ← F * MAG;
    DL ← 1000 / (F);
    IF S1 = 0 THEN r ← .1;

    I1 ← 7.5 * Im / LF;      
    I2 ← 5 / SQRT(F);           
    I3 ← IM * 30*(8.5-(LF))/F;
	end;
INSTRUMENT VN1; 
Variable /NewMag, /env;
VARIABLE Reset1, racket, OtherFreq, /Gliss, Distance, Stereo,
	Freq, Amp1, Amp2, Duration, AttackTime, DecayTime, Memory1,
        Index1, Index2, Index3, ScFreq, DecayLength, Switch1, Switch2,
	/Mod1, /Mod2, /Mod3, /Att, /Vibrato, IMult, /Snd,
	/Flutter, VibRate, VibAmp, /Ramp, /Decay, VibSwitch, LogFreq,
        GlissLength, Bowing, DecayCall, VibCall, GlissCall, RampCall;

    Memory1←1;

I_ONLY BEGIN
    Duration ← P2;    
    Freq ← P3;        
    Amp1 ← P4;         
    Amp2 ← P5;       		 <end volume if bowing = 1.
    OtherFreq ← P6;   		 <Sets endpoint of Gliss.


    Switch1 ← P14;  	  	 <1=ARCO, 0=PIZZ. 
    Switch2 ← 1 - Switch1;
    IMult ← P7 - (Switch2 / 4);
    VibSwitch ← P8;		 <1 = Vib. 0 = no Vib.
    Bowing ← P9;     		 <0=Detached, 1=Legato.

    Distance ← P10;   
    Stereo ← P11;     		 <0=All OUTB, 1=All OUTA.
    racket ← P12;
    GlissLength ← p13 * p2;;		 <if OtherFreq ≠ Freq, sets amount of glissando
	
    LogFreq ← Alog(Freq);

    DecayCall ← VibCall ← RampCall ← GlissCall ← 20;
    IF Amp1 = Amp2 THEN RampCall ← SRATE;
    IF Freq = OtherFreq THEN GlissCall ← SRATE;
    IF VibSwitch = 0 Then VibCall ← SRATE;
    IF Switch1 = 1 Then DecayCall ← SRATE;
            
Bowset (bowing,memory1,decaytime,attacktime,racket,duration);

NumSet(VibRate,VibAmp,ScFreq,Freq,DecayLength,Switch1,racket,
	Index1,Index2,Index3,IMult,LogFreq);

END;

Decay ← Switch1 + EXPEN[DecayCall] (Switch2, MAG * 20 / DecayLength, DecayFunc);
ENV ← Switch2 + 
LINEN[20] (Switch1, AttackTime/20, DecayTime/20, Duration/20, Ampfunc, Reset1 ← 0);	 

Ramp ← Amp1 + NOSCIL[RampCall] (Amp2 - Amp1, 20 * (MAG / Duration), AttackFunc);
Gliss ← Freq + EXPEN[GlissCall] (OtherFreq - Freq, 20 * MAG/GlissLength, GlissFunc);

Flutter ← RANDI[VibCall] (1, 200 * MAG);				
Vibrato ← NOSCIL[VibCall] (ENV, VibRate * MAG * 20, Sinewave);		
Att ← 1 - EXPEN[20](1, MAG*640, AttackFunc);

Newmag ← (1 + Flutter * .005) * (1 + Vibrato * VibAmp) * (1 +
	RANDI (racket *  Att, 2000 * MAG)) * Gliss * MAG;                                

Mod1 ← NOSCIL (Decay * ScFreq * (Att+Index1), Newmag, Sinewave);	
Mod2 ← NOSCIL (Decay * ScFreq * (Att+Index2), 4 * Newmag, Sinewave);
Mod3 ← NOSCIL (Decay * ScFreq * (Att+Index3), 3 * Newmag, Sinewave); 
Snd ← ZOSCIL (Decay * ENV * Ramp, Newmag + Mod1 + Mod2 + Mod3, Sinewave);	

<DSIG ← DSIG + Snd * .05;
OUTA ← OUTA + Snd * Stereo / Distance;          
<OUTB ← OUTB + Snd * (1 - Stereo) / Distance;          
END;
INSTRUMENT VN2; 
Variable /NewMag, /env;
VARIABLE Reset1, racket, OtherFreq, /Gliss, Distance, Stereo,
	Freq, Amp1, Amp2, Duration, AttackTime, DecayTime, Memory1,
        Index1, Index2, Index3, ScFreq, DecayLength, Switch1, Switch2,
	/Mod1, /Mod2, /Mod3, /Att, /Vibrato, IMult, /Snd,
	/Flutter, VibRate, VibAmp, /Ramp, /Decay, VibSwitch, LogFreq,
        GlissLength, Bowing, DecayCall, VibCall, GlissCall, RampCall;

    Memory1←1;

I_ONLY BEGIN
    Duration ← P2;    
    Freq ← P3;        
    Amp1 ← P4;         
    Amp2 ← P5;       		 <end volume if bowing = 1.
    OtherFreq ← P6;   		 <Sets endpoint of Gliss.


    Switch1 ← P14;  	  	 <1=ARCO, 0=PIZZ. 
    Switch2 ← 1 - Switch1;
    IMult ← P7 - (Switch2 / 4);
    VibSwitch ← P8;		 <1 = Vib. 0 = no Vib.
    Bowing ← P9;     		 <0=Detached, 1=Legato.

    Distance ← P10;   
    Stereo ← P11;     		 <0=All OUTB, 1=All OUTA.
    racket ← P12;
    GlissLength ← p13 * p2;;		 <if OtherFreq ≠ Freq, sets amount of glissando
	
    LogFreq ← Alog(Freq);

    DecayCall ← VibCall ← RampCall ← GlissCall ← 20;
    IF Amp1 = Amp2 THEN RampCall ← SRATE;
    IF Freq = OtherFreq THEN GlissCall ← SRATE;
    IF VibSwitch = 0 Then VibCall ← SRATE;
    IF Switch1 = 1 Then DecayCall ← SRATE;
            
Bowset (bowing,memory1,decaytime,attacktime,racket,duration);

NumSet(VibRate,VibAmp,ScFreq,Freq,DecayLength,Switch1,racket,
	Index1,Index2,Index3,IMult,LogFreq);

END;

Decay ← Switch1 + EXPEN[DecayCall] (Switch2, MAG * 20 / DecayLength, DecayFunc);
ENV ← Switch2 + 
LINEN[20] (Switch1, AttackTime/20, DecayTime/20, Duration/20, Ampfunc, Reset1 ← 0);	 

Ramp ← Amp1 + NOSCIL[RampCall] (Amp2 - Amp1, 20 * (MAG / Duration), AttackFunc);
Gliss ← Freq + EXPEN[GlissCall] (OtherFreq - Freq, 20 * MAG/GlissLength, GlissFunc);

Flutter ← RANDI[VibCall] (1, 200 * MAG);				
Vibrato ← NOSCIL[VibCall] (ENV, VibRate * MAG * 20, Sinewave);		
Att ← 1 - EXPEN[20](1, MAG*640, AttackFunc);

Newmag ← (1 + Flutter * .005) * (1 + Vibrato * VibAmp) * (1 +
	RANDI (racket *  Att, 2000 * MAG)) * Gliss * MAG;                                

Mod1 ← NOSCIL (Decay * ScFreq * (Att+Index1), Newmag, Sinewave);	
Mod2 ← NOSCIL (Decay * ScFreq * (Att+Index2), 4 * Newmag, Sinewave);
Mod3 ← NOSCIL (Decay * ScFreq * (Att+Index3), 3 * Newmag, Sinewave); 
Snd ← ZOSCIL (Decay * ENV * Ramp, Newmag + Mod1 + Mod2 + Mod3, Sinewave);	

<DSIG ← DSIG + Snd * .05;
OUTA ← OUTA + Snd * Stereo / Distance;          
<OUTB ← OUTB + Snd * (1 - Stereo) / Distance;          
END;
INSTRUMENT VN3; 
Variable /NewMag, /env;
VARIABLE Reset1, racket, OtherFreq, /Gliss, Distance, Stereo,
	Freq, Amp1, Amp2, Duration, AttackTime, DecayTime, Memory1,
        Index1, Index2, Index3, ScFreq, DecayLength, Switch1, Switch2,
	/Mod1, /Mod2, /Mod3, /Att, /Vibrato, IMult, /Snd,
	/Flutter, VibRate, VibAmp, /Ramp, /Decay, VibSwitch, LogFreq,
        GlissLength, Bowing, DecayCall, VibCall, GlissCall, RampCall;

    Memory1←1;

I_ONLY BEGIN
    Duration ← P2;    
    Freq ← P3;        
    Amp1 ← P4;         
    Amp2 ← P5;       		 <end volume if bowing = 1.
    OtherFreq ← P6;   		 <Sets endpoint of Gliss.


    Switch1 ← P14;  	  	 <1=ARCO, 0=PIZZ. 
    Switch2 ← 1 - Switch1;
    IMult ← P7 - (Switch2 / 4);
    VibSwitch ← P8;		 <1 = Vib. 0 = no Vib.
    Bowing ← P9;     		 <0=Detached, 1=Legato.

    Distance ← P10;   
    Stereo ← P11;     		 <0=All OUTB, 1=All OUTA.
    racket ← P12;
    GlissLength ← p13 * p2;;		 <if OtherFreq ≠ Freq, sets amount of glissando
	
    LogFreq ← Alog(Freq);

    DecayCall ← VibCall ← RampCall ← GlissCall ← 20;
    IF Amp1 = Amp2 THEN RampCall ← SRATE;
    IF Freq = OtherFreq THEN GlissCall ← SRATE;
    IF VibSwitch = 0 Then VibCall ← SRATE;
    IF Switch1 = 1 Then DecayCall ← SRATE;
            
Bowset (bowing,memory1,decaytime,attacktime,racket,duration);

NumSet(VibRate,VibAmp,ScFreq,Freq,DecayLength,Switch1,racket,
	Index1,Index2,Index3,IMult,LogFreq);

END;

Decay ← Switch1 + EXPEN[DecayCall] (Switch2, MAG * 20 / DecayLength, DecayFunc);
ENV ← Switch2 + 
LINEN[20] (Switch1, AttackTime/20, DecayTime/20, Duration/20, Ampfunc, Reset1 ← 0);	 

Ramp ← Amp1 + NOSCIL[RampCall] (Amp2 - Amp1, 20 * (MAG / Duration), AttackFunc);
Gliss ← Freq + EXPEN[GlissCall] (OtherFreq - Freq, 20 * MAG/GlissLength, GlissFunc);

Flutter ← RANDI[VibCall] (1, 200 * MAG);				
Vibrato ← NOSCIL[VibCall] (ENV, VibRate * MAG * 20, Sinewave);		
Att ← 1 - EXPEN[20](1, MAG*640, AttackFunc);

Newmag ← (1 + Flutter * .005) * (1 + Vibrato * VibAmp) * (1 +
	RANDI (racket *  Att, 2000 * MAG)) * Gliss * MAG;                                

Mod1 ← NOSCIL (Decay * ScFreq * (Att+Index1), Newmag, Sinewave);	
Mod2 ← NOSCIL (Decay * ScFreq * (Att+Index2), 4 * Newmag, Sinewave);
Mod3 ← NOSCIL (Decay * ScFreq * (Att+Index3), 3 * Newmag, Sinewave); 
Snd ← ZOSCIL (Decay * ENV * Ramp, Newmag + Mod1 + Mod2 + Mod3, Sinewave);	

<DSIG ← DSIG + Snd * .05;
OUTA ← OUTA + Snd * Stereo / Distance;          
<OUTB ← OUTB + Snd * (1 - Stereo) / Distance;          
END;
INSTRUMENT VN4; 
Variable /NewMag, /env;
VARIABLE Reset1, racket, OtherFreq, /Gliss, Distance, Stereo,
	Freq, Amp1, Amp2, Duration, AttackTime, DecayTime, Memory1,
        Index1, Index2, Index3, ScFreq, DecayLength, Switch1, Switch2,
	/Mod1, /Mod2, /Mod3, /Att, /Vibrato, IMult, /Snd,
	/Flutter, VibRate, VibAmp, /Ramp, /Decay, VibSwitch, LogFreq,
        GlissLength, Bowing, DecayCall, VibCall, GlissCall, RampCall;

    Memory1←1;

I_ONLY BEGIN
    Duration ← P2;    
    Freq ← P3;        
    Amp1 ← P4;         
    Amp2 ← P5;       		 <end volume if bowing = 1.
    OtherFreq ← P6;   		 <Sets endpoint of Gliss.


    Switch1 ← P14;  	  	 <1=ARCO, 0=PIZZ. 
    Switch2 ← 1 - Switch1;
    IMult ← P7 - (Switch2 / 4);
    VibSwitch ← P8;		 <1 = Vib. 0 = no Vib.
    Bowing ← P9;     		 <0=Detached, 1=Legato.

    Distance ← P10;   
    Stereo ← P11;     		 <0=All OUTB, 1=All OUTA.
    racket ← P12;
    GlissLength ← p13 * p2;;		 <if OtherFreq ≠ Freq, sets amount of glissando
	
    LogFreq ← Alog(Freq);

    DecayCall ← VibCall ← RampCall ← GlissCall ← 20;
    IF Amp1 = Amp2 THEN RampCall ← SRATE;
    IF Freq = OtherFreq THEN GlissCall ← SRATE;
    IF VibSwitch = 0 Then VibCall ← SRATE;
    IF Switch1 = 1 Then DecayCall ← SRATE;
            
Bowset (bowing,memory1,decaytime,attacktime,racket,duration);

NumSet(VibRate,VibAmp,ScFreq,Freq,DecayLength,Switch1,racket,
	Index1,Index2,Index3,IMult,LogFreq);

END;

Decay ← Switch1 + EXPEN[DecayCall] (Switch2, MAG * 20 / DecayLength, DecayFunc);
ENV ← Switch2 + 
LINEN[20] (Switch1, AttackTime/20, DecayTime/20, Duration/20, Ampfunc, Reset1 ← 0);	 

Ramp ← Amp1 + NOSCIL[RampCall] (Amp2 - Amp1, 20 * (MAG / Duration), AttackFunc);
Gliss ← Freq + EXPEN[GlissCall] (OtherFreq - Freq, 20 * MAG/GlissLength, GlissFunc);

Flutter ← RANDI[VibCall] (1, 200 * MAG);				
Vibrato ← NOSCIL[VibCall] (ENV, VibRate * MAG * 20, Sinewave);		
Att ← 1 - EXPEN[20](1, MAG*640, AttackFunc);

Newmag ← (1 + Flutter * .005) * (1 + Vibrato * VibAmp) * (1 +
	RANDI (racket *  Att, 2000 * MAG)) * Gliss * MAG;                                

Mod1 ← NOSCIL (Decay * ScFreq * (Att+Index1), Newmag, Sinewave);	
Mod2 ← NOSCIL (Decay * ScFreq * (Att+Index2), 4 * Newmag, Sinewave);
Mod3 ← NOSCIL (Decay * ScFreq * (Att+Index3), 3 * Newmag, Sinewave); 
Snd ← ZOSCIL (Decay * ENV * Ramp, Newmag + Mod1 + Mod2 + Mod3, Sinewave);	

<DSIG ← DSIG + Snd * .05;
OUTA ← OUTA + Snd * Stereo / Distance;          
<OUTB ← OUTB + Snd * (1 - Stereo) / Distance;          
END;
INSTRUMENT VN5; 
Variable /NewMag, /env;
VARIABLE Reset1, racket, OtherFreq, /Gliss, Distance, Stereo,
	Freq, Amp1, Amp2, Duration, AttackTime, DecayTime, Memory1,
        Index1, Index2, Index3, ScFreq, DecayLength, Switch1, Switch2,
	/Mod1, /Mod2, /Mod3, /Att, /Vibrato, IMult, /Snd,
	/Flutter, VibRate, VibAmp, /Ramp, /Decay, VibSwitch, LogFreq,
        GlissLength, Bowing, DecayCall, VibCall, GlissCall, RampCall;

    Memory1←1;

I_ONLY BEGIN
    Duration ← P2;    
    Freq ← P3;        
    Amp1 ← P4;         
    Amp2 ← P5;       		 <end volume if bowing = 1.
    OtherFreq ← P6;   		 <Sets endpoint of Gliss.


    Switch1 ← P14;  	  	 <1=ARCO, 0=PIZZ. 
    Switch2 ← 1 - Switch1;
    IMult ← P7 - (Switch2 / 4);
    VibSwitch ← P8;		 <1 = Vib. 0 = no Vib.
    Bowing ← P9;     		 <0=Detached, 1=Legato.

    Distance ← P10;   
    Stereo ← P11;     		 <0=All OUTB, 1=All OUTA.
    racket ← P12;
    GlissLength ← p13 * p2;;		 <if OtherFreq ≠ Freq, sets amount of glissando
	
    LogFreq ← Alog(Freq);

    DecayCall ← VibCall ← RampCall ← GlissCall ← 20;
    IF Amp1 = Amp2 THEN RampCall ← SRATE;
    IF Freq = OtherFreq THEN GlissCall ← SRATE;
    IF VibSwitch = 0 Then VibCall ← SRATE;
    IF Switch1 = 1 Then DecayCall ← SRATE;
            
Bowset (bowing,memory1,decaytime,attacktime,racket,duration);

NumSet(VibRate,VibAmp,ScFreq,Freq,DecayLength,Switch1,racket,
	Index1,Index2,Index3,IMult,LogFreq);

END;

Decay ← Switch1 + EXPEN[DecayCall] (Switch2, MAG * 20 / DecayLength, DecayFunc);
ENV ← Switch2 + 
LINEN[20] (Switch1, AttackTime/20, DecayTime/20, Duration/20, Ampfunc, Reset1 ← 0);	 

Ramp ← Amp1 + NOSCIL[RampCall] (Amp2 - Amp1, 20 * (MAG / Duration), AttackFunc);
Gliss ← Freq + EXPEN[GlissCall] (OtherFreq - Freq, 20 * MAG/GlissLength, GlissFunc);

Flutter ← RANDI[VibCall] (1, 200 * MAG);				
Vibrato ← NOSCIL[VibCall] (ENV, VibRate * MAG * 20, Sinewave);		
Att ← 1 - EXPEN[20](1, MAG*640, AttackFunc);

Newmag ← (1 + Flutter * .005) * (1 + Vibrato * VibAmp) * (1 +
	RANDI (racket *  Att, 2000 * MAG)) * Gliss * MAG;                                

Mod1 ← NOSCIL (Decay * ScFreq * (Att+Index1), Newmag, Sinewave);	
Mod2 ← NOSCIL (Decay * ScFreq * (Att+Index2), 4 * Newmag, Sinewave);
Mod3 ← NOSCIL (Decay * ScFreq * (Att+Index3), 3 * Newmag, Sinewave); 
Snd ← ZOSCIL (Decay * ENV * Ramp, Newmag + Mod1 + Mod2 + Mod3, Sinewave);	

<DSIG ← DSIG + Snd * .05;
OUTA ← OUTA + Snd * Stereo / Distance;          
<OUTB ← OUTB + Snd * (1 - Stereo) / Distance;          
END;
INSTRUMENT VN6; 
Variable /NewMag, /env;
VARIABLE Reset1, racket, OtherFreq, /Gliss, Distance, Stereo,
	Freq, Amp1, Amp2, Duration, AttackTime, DecayTime, Memory1,
        Index1, Index2, Index3, ScFreq, DecayLength, Switch1, Switch2,
	/Mod1, /Mod2, /Mod3, /Att, /Vibrato, IMult, /Snd,
	/Flutter, VibRate, VibAmp, /Ramp, /Decay, VibSwitch, LogFreq,
        GlissLength, Bowing, DecayCall, VibCall, GlissCall, RampCall;

    Memory1←1;

I_ONLY BEGIN
    Duration ← P2;    
    Freq ← P3;        
    Amp1 ← P4;         
    Amp2 ← P5;       		 <end volume if bowing = 1.
    OtherFreq ← P6;   		 <Sets endpoint of Gliss.


    Switch1 ← P14;  	  	 <1=ARCO, 0=PIZZ. 
    Switch2 ← 1 - Switch1;
    IMult ← P7 - (Switch2 / 4);
    VibSwitch ← P8;		 <1 = Vib. 0 = no Vib.
    Bowing ← P9;     		 <0=Detached, 1=Legato.

    Distance ← P10;   
    Stereo ← P11;     		 <0=All OUTB, 1=All OUTA.
    racket ← P12;
    GlissLength ← p13 * p2;;		 <if OtherFreq ≠ Freq, sets amount of glissando
	
    LogFreq ← Alog(Freq);

    DecayCall ← VibCall ← RampCall ← GlissCall ← 20;
    IF Amp1 = Amp2 THEN RampCall ← SRATE;
    IF Freq = OtherFreq THEN GlissCall ← SRATE;
    IF VibSwitch = 0 Then VibCall ← SRATE;
    IF Switch1 = 1 Then DecayCall ← SRATE;
            
Bowset (bowing,memory1,decaytime,attacktime,racket,duration);

NumSet(VibRate,VibAmp,ScFreq,Freq,DecayLength,Switch1,racket,
	Index1,Index2,Index3,IMult,LogFreq);

END;

Decay ← Switch1 + EXPEN[DecayCall] (Switch2, MAG * 20 / DecayLength, DecayFunc);
ENV ← Switch2 + 
LINEN[20] (Switch1, AttackTime/20, DecayTime/20, Duration/20, Ampfunc, Reset1 ← 0);	 

Ramp ← Amp1 + NOSCIL[RampCall] (Amp2 - Amp1, 20 * (MAG / Duration), AttackFunc);
Gliss ← Freq + EXPEN[GlissCall] (OtherFreq - Freq, 20 * MAG/GlissLength, GlissFunc);

Flutter ← RANDI[VibCall] (1, 200 * MAG);				
Vibrato ← NOSCIL[VibCall] (ENV, VibRate * MAG * 20, Sinewave);		
Att ← 1 - EXPEN[20](1, MAG*640, AttackFunc);

Newmag ← (1 + Flutter * .005) * (1 + Vibrato * VibAmp) * (1 +
	RANDI (racket *  Att, 2000 * MAG)) * Gliss * MAG;                                

Mod1 ← NOSCIL (Decay * ScFreq * (Att+Index1), Newmag, Sinewave);	
Mod2 ← NOSCIL (Decay * ScFreq * (Att+Index2), 4 * Newmag, Sinewave);
Mod3 ← NOSCIL (Decay * ScFreq * (Att+Index3), 3 * Newmag, Sinewave); 
Snd ← ZOSCIL (Decay * ENV * Ramp, Newmag + Mod1 + Mod2 + Mod3, Sinewave);	

<DSIG ← DSIG + Snd * .05;
OUTA ← OUTA + Snd * Stereo / Distance;          
<OUTB ← OUTB + Snd * (1 - Stereo) / Distance;          
END;
INSTRUMENT VN7; 
Variable /NewMag, /env;
VARIABLE Reset1, racket, OtherFreq, /Gliss, Distance, Stereo,
	Freq, Amp1, Amp2, Duration, AttackTime, DecayTime, Memory1,
        Index1, Index2, Index3, ScFreq, DecayLength, Switch1, Switch2,
	/Mod1, /Mod2, /Mod3, /Att, /Vibrato, IMult, /Snd,
	/Flutter, VibRate, VibAmp, /Ramp, /Decay, VibSwitch, LogFreq,
        GlissLength, Bowing, DecayCall, VibCall, GlissCall, RampCall;

    Memory1←1;

I_ONLY BEGIN
    Duration ← P2;    
    Freq ← P3;        
    Amp1 ← P4;         
    Amp2 ← P5;       		 <end volume if bowing = 1.
    OtherFreq ← P6;   		 <Sets endpoint of Gliss.


    Switch1 ← P14;  	  	 <1=ARCO, 0=PIZZ. 
    Switch2 ← 1 - Switch1;
    IMult ← P7 - (Switch2 / 4);
    VibSwitch ← P8;		 <1 = Vib. 0 = no Vib.
    Bowing ← P9;     		 <0=Detached, 1=Legato.

    Distance ← P10;   
    Stereo ← P11;     		 <0=All OUTB, 1=All OUTA.
    racket ← P12;
    GlissLength ← p13 * p2;;		 <if OtherFreq ≠ Freq, sets amount of glissando
	
    LogFreq ← Alog(Freq);

    DecayCall ← VibCall ← RampCall ← GlissCall ← 20;
    IF Amp1 = Amp2 THEN RampCall ← SRATE;
    IF Freq = OtherFreq THEN GlissCall ← SRATE;
    IF VibSwitch = 0 Then VibCall ← SRATE;
    IF Switch1 = 1 Then DecayCall ← SRATE;
            
Bowset (bowing,memory1,decaytime,attacktime,racket,duration);

NumSet(VibRate,VibAmp,ScFreq,Freq,DecayLength,Switch1,racket,
	Index1,Index2,Index3,IMult,LogFreq);

END;

Decay ← Switch1 + EXPEN[DecayCall] (Switch2, MAG * 20 / DecayLength, DecayFunc);
ENV ← Switch2 + 
LINEN[20] (Switch1, AttackTime/20, DecayTime/20, Duration/20, Ampfunc, Reset1 ← 0);	 

Ramp ← Amp1 + NOSCIL[RampCall] (Amp2 - Amp1, 20 * (MAG / Duration), AttackFunc);
Gliss ← Freq + EXPEN[GlissCall] (OtherFreq - Freq, 20 * MAG/GlissLength, GlissFunc);

Flutter ← RANDI[VibCall] (1, 200 * MAG);				
Vibrato ← NOSCIL[VibCall] (ENV, VibRate * MAG * 20, Sinewave);		
Att ← 1 - EXPEN[20](1, MAG*640, AttackFunc);

Newmag ← (1 + Flutter * .005) * (1 + Vibrato * VibAmp) * (1 +
	RANDI (racket *  Att, 2000 * MAG)) * Gliss * MAG;                                

Mod1 ← NOSCIL (Decay * ScFreq * (Att+Index1), Newmag, Sinewave);	
Mod2 ← NOSCIL (Decay * ScFreq * (Att+Index2), 4 * Newmag, Sinewave);
Mod3 ← NOSCIL (Decay * ScFreq * (Att+Index3), 3 * Newmag, Sinewave); 
Snd ← ZOSCIL (Decay * ENV * Ramp, Newmag + Mod1 + Mod2 + Mod3, Sinewave);	

<DSIG ← DSIG + Snd * .05;
OUTA ← OUTA + Snd * Stereo / Distance;          
<OUTB ← OUTB + Snd * (1 - Stereo) / Distance;          
END;
INSTRUMENT VN8; 
Variable /NewMag, /env;
VARIABLE Reset1, racket, OtherFreq, /Gliss, Distance, Stereo,
	Freq, Amp1, Amp2, Duration, AttackTime, DecayTime, Memory1,
        Index1, Index2, Index3, ScFreq, DecayLength, Switch1, Switch2,
	/Mod1, /Mod2, /Mod3, /Att, /Vibrato, IMult, /Snd,
	/Flutter, VibRate, VibAmp, /Ramp, /Decay, VibSwitch, LogFreq,
        GlissLength, Bowing, DecayCall, VibCall, GlissCall, RampCall;

    Memory1←1;

I_ONLY BEGIN
    Duration ← P2;    
    Freq ← P3;        
    Amp1 ← P4;         
    Amp2 ← P5;       		 <end volume if bowing = 1.
    OtherFreq ← P6;   		 <Sets endpoint of Gliss.


    Switch1 ← P14;  	  	 <1=ARCO, 0=PIZZ. 
    Switch2 ← 1 - Switch1;
    IMult ← P7 - (Switch2 / 4);
    VibSwitch ← P8;		 <1 = Vib. 0 = no Vib.
    Bowing ← P9;     		 <0=Detached, 1=Legato.

    Distance ← P10;   
    Stereo ← P11;     		 <0=All OUTB, 1=All OUTA.
    racket ← P12;
    GlissLength ← p13 * p2;;		 <if OtherFreq ≠ Freq, sets amount of glissando
	
    LogFreq ← Alog(Freq);

    DecayCall ← VibCall ← RampCall ← GlissCall ← 20;
    IF Amp1 = Amp2 THEN RampCall ← SRATE;
    IF Freq = OtherFreq THEN GlissCall ← SRATE;
    IF VibSwitch = 0 Then VibCall ← SRATE;
    IF Switch1 = 1 Then DecayCall ← SRATE;
            
Bowset (bowing,memory1,decaytime,attacktime,racket,duration);

NumSet(VibRate,VibAmp,ScFreq,Freq,DecayLength,Switch1,racket,
	Index1,Index2,Index3,IMult,LogFreq);

END;

Decay ← Switch1 + EXPEN[DecayCall] (Switch2, MAG * 20 / DecayLength, DecayFunc);
ENV ← Switch2 + 
LINEN[20] (Switch1, AttackTime/20, DecayTime/20, Duration/20, Ampfunc, Reset1 ← 0);	 

Ramp ← Amp1 + NOSCIL[RampCall] (Amp2 - Amp1, 20 * (MAG / Duration), AttackFunc);
Gliss ← Freq + EXPEN[GlissCall] (OtherFreq - Freq, 20 * MAG/GlissLength, GlissFunc);

Flutter ← RANDI[VibCall] (1, 200 * MAG);				
Vibrato ← NOSCIL[VibCall] (ENV, VibRate * MAG * 20, Sinewave);		
Att ← 1 - EXPEN[20](1, MAG*640, AttackFunc);

Newmag ← (1 + Flutter * .005) * (1 + Vibrato * VibAmp) * (1 +
	RANDI (racket *  Att, 2000 * MAG)) * Gliss * MAG;                                

Mod1 ← NOSCIL (Decay * ScFreq * (Att+Index1), Newmag, Sinewave);	
Mod2 ← NOSCIL (Decay * ScFreq * (Att+Index2), 4 * Newmag, Sinewave);
Mod3 ← NOSCIL (Decay * ScFreq * (Att+Index3), 3 * Newmag, Sinewave); 
Snd ← ZOSCIL (Decay * ENV * Ramp, Newmag + Mod1 + Mod2 + Mod3, Sinewave);	

<DSIG ← DSIG + Snd * .05;
OUTA ← OUTA + Snd * Stereo / Distance;          
<OUTB ← OUTB + Snd * (1 - Stereo) / Distance;          
END;